﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace AlarmClockExample
{
    // 定义闹钟类
    public class AlarmClock
    {
        // 定义滴答事件
        public event EventHandler Tick;
        // 定义响铃事件
        public event EventHandler Alarm;

        // 闹钟的响铃时间
        public DateTime AlarmTime { get; set; }

        // 启动闹钟
        public void Start()
        {
            Console.WriteLine("闹钟已启动！");
            while (true)
            {
                // 获取当前时间
                DateTime currentTime = DateTime.Now;

                // 触发滴答事件
                OnTick();

                // 检查是否到达响铃时间
                if (currentTime >= AlarmTime)
                {
                    // 触发响铃事件
                    OnAlarm();
                    break; // 响铃后退出循环
                }

                // 等待1秒
                Thread.Sleep(1000);
            }
        }

        // 触发滴答事件
        protected virtual void OnTick()
        {
            Tick?.Invoke(this, EventArgs.Empty);
        }

        // 触发响铃事件
        protected virtual void OnAlarm()
        {
            Alarm?.Invoke(this, EventArgs.Empty);
        }
    }

    internal class Program
    {
        static void Main(string[] args)
        {
            // 创建闹钟实例
            AlarmClock alarmClock = new AlarmClock();

            // 设置响铃时间为当前时间 + 10秒
            alarmClock.AlarmTime = DateTime.Now.AddSeconds(10);

            // 订阅滴答事件
            alarmClock.Tick += (sender, e) =>
            {
                Console.WriteLine($"滴答... 当前时间: {DateTime.Now.ToLongTimeString()}");
            };

            // 订阅响铃事件
            alarmClock.Alarm += (sender, e) =>
            {
                Console.WriteLine("叮铃铃！时间到了！");
            };

            // 启动闹钟
            alarmClock.Start();
        }
    }
}
